進行PDM系統設計時,須有一功能:檢查BOM子件所有存在於<父階>及<父階所有父階>的ERP製令狀態--該製令是否未完工或未生產。做此功能函式,應用到遞迴。
利用遞迴設計函式的做法 本文
為什麼SQL要用組字串的方式?
不太了解你的疑問,本例是在C++的程式碼。在程式中建立SQL連線,擷取資料,傳回程式做處理。
AdoQuery可以透過參數話查詢去寫
組SQL查詢字串,能免盡量免吧!
BCB的參數化寫法:
<pre class="c" name="code">
String s=" SELECT MOCTA.TA011 AS 狀態碼, MOCTA.TA013 AS 確認碼 FROM MOCTB INNER JOIN "
" MOCTA ON MOCTB.TB001 = MOCTA.TA001 AND MOCTB.TB002 = MOCTA.TA002 "
" WHERE (MOCTA.TA013 = 'Y') AND MOCTB.TB003 = :Pno AND MOCTA.TA006 = :Bomno";
P1 = ADOQuery->Parameters->ParamByName("Pno");
P1->Value = pno;
p2 = ADOQuery->Parameters->ParamByName("Bomno");
p2->Value = bomno
ㄟ?!不錯,TADOQuery還存在著官方文件
TADOQuery Members
裡頭有提到Parameters的用法
上頭的範例,故意把SQL的參數與外部傳入的參數值,透過第一個字元大小寫的差異分隔開,避免混淆
喔,我知道可以這樣。
但請問差別在哪裡?
強~
但這是很少階層才能用遞回展開
我以前用SQL 遞回寫傳銷系統的左右樹
每個會員下有幾個子會員,幾個左線,幾個右線
缺幾顆球,有多少獎金
獎金怎麼往上拋等..
2,3層運算度都很快
16,17層,上千筆資料用遞回方式..很慢
這樣要用反正規化方式,在資料進入時就要算,而不能在查詢時算
謝謝指教,本公司BOM層數不多,頂多5、6層而已。
而依我比較過遞迴及迴圈,兩者效能差不多,速度都可接受。只是最大困擾是在建tree,往往時間都是耗費在DBTreeView上,有夠慢,應該是BCB元件本身的問題了。
請問各位高手..像類似的BOM.要如何讓他展出來的資料是最低階(尾階)的資料呢?中間的階的品號不管。
例如:
最上階品號,最下階品號,階數,組成用量
// 取出TreeView:tre所有最尾階node之Text值,函式傳出陣列
TStringDynArray tree_last_sons_txt(TTreeView *tre)
{
DynamicArray < String > ar;
TTreeNode *nd;
for(int i=0;i<tre->Items->Count;i++)
{
nd=tre->Items->Item[i];
if(nd->getFirstChild()==NULL){
ar.Length++;
ar[ar.Length-1]=nd->Text;
}
}
return ar;
}
用法:
DynamicArray < String > ar; //建一動態陣列
ar=tree_last_sons_txt(TreeView1); //所得的所有尾階件號存入陣列